home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Interactive 7
/
PC World Interactive 7.iso
/
program
/
qbprog.EXE
/
MODEMBUL.BAS
< prev
next >
Wrap
BASIC Source File
|
1995-10-18
|
6KB
|
214 lines
'QBASIC'de çalìƒìr
'QBX için QBX/L QBX ƒeklinde
'QB için QB/L QB ƒeklinde
' yüklenmelidir
'Her Türlü modemi bulma programì
'Yapìm : Gürol Demir Aºustos 1995
CLS
COLOR 1, 7
LOCATE
PRINT "C.No█Adresi█IRQ No█Yapìlan iƒlem ve sonuç█Fabrika Hìzì"
COLOR 7, 1
Bekle = 5: 'Portun tepki vermesini saniye cinsinden bekleme deºeri
A$ = "103F8202F8303E8402E854220642287522085228": 'Bütün portlar bu deºiƒkende
'Com No+Adres+.. formatìnda
FOR I = 1 TO 40 STEP 5
Port$ = MID$(A$, I, 5)
PRINT "Com"; LEFT$(Port$, 1); " "; RIGHT$(Port$, 4); " ??"
NEXT
'ÿnterrupt (IRQ=2,3,4,5,7 INT=A,B,C,D,F) adresleri saklanìyor
DIM Sakla(24)
DEF SEG = 0
FOR I = 40 TO 63
Sakla(I - 39) = PEEK(I)
NEXT
'Yeni interrupt rutinleri yerleƒtiriliyor
FOR Y = 2 TO 7
IF Y <> 6 THEN
DEF SEG = &HB900
RESTORE YeniKesme
B = (Y - 2) * 20 + 11
FOR I = B TO B + 17
READ A
POKE I, A
NEXT
POKE B + 9, Y
DEF SEG = 0
C = 32 + Y * 4
POKE C, B
POKE C + 1, 0
POKE C + 2, 0
POKE C + 3, &HB9
END IF
NEXT
'ÿnterrupt yazmacì (PIC) IRQ'larìn çalìƒmasì için ayarlanìyor
'IRQ6 Dìƒìnda bütün IRQ'lar aktifleƒtiriliyor.(yani IRQ2,3,4,5,7)
FOR Y1 = 2 TO 7
IF Y1 <> 6 THEN
RESTORE IRQSerbest
REDIM Oku(44)
DEF SEG = VARSEG(Oku(0))
FOR PicMask = 0 TO 44
READ D%
IF PicMask = 13 THEN D% = Y1
POKE VARPTR(Oku(0)) + PicMask, D%
NEXT PicMask
CALL ABSOLUTE(VARPTR(Oku(0)))
END IF
NEXT
'Port adreslerine göre aramaya baƒlìyorum.....
FOR I = 1 TO 40 STEP 5
'ÿnterruptlarìn yazacaºì offsetler temizleniyor
DEF SEG = &HB900
FOR Y = 2 TO 9
POKE Y, 0
NEXT
COLOR 7, 1
Port$ = MID$(A$, I + 1, 4)
Port = VAL("&H" + Port$)
LOCATE VAL(MID$(A$, I, 1)) + 1, 20
PRINT "Bakìyorum"
LOCATE VAL(MID$(A$, I, 1)) + 1, 20
IF INP(Port + 1) <> 255 THEN
'Portda bir aygìt var hìzì 14400 Bps'e ayarlanìyor
A = INP(Port + 3)
OUT Port + 3, 128
OUT Port, 115200 / 14400
OUT Port + 3, A
'Portlarìn IRQ üretmesi için ayarlar yapìlìyor
OUT Port + 1, 3
OUT Port + 4, 11
FOR S = 1 TO 2
B$ = "ATZ" + CHR$(13)
GOSUB Yolla
NEXT
'ÿnterrupt offsetlerine bakìlìyor, Kesme oluƒmuƒ mu?
DEF SEG = &HB900
FOR Y = 2 TO 9
IF PEEK(Y) <> 0 THEN LOCATE VAL(MID$(A$, I, 1)) + 1, 13: PRINT "Irq="; Y: LOCATE VAL(MID$(A$, I, 1)) + 1, 20
NEXT
GOSUB Gelen
IF INSTR(B$, "OK") = 0 THEN
PRINT "Baƒka bir aygìt var !"
ELSE
COLOR 15, 1
PRINT "Bir modem bulundu... ";
B$ = "ATI" + CHR$(13)
GOSUB Yolla
GOSUB Gelen
IF INSTR(B$, "14400") > 1 THEN Baud$ = "14400 Bps"
IF INSTR(B$, "2400") > 1 THEN Baud$ = "2400 Bps"
IF INSTR(B$, "28000") > 1 THEN Baud$ = "28800 Bps"
IF INSTR(B$, "ERROR") > 1 THEN Baud$ = "Öºrenilemedi!"
PRINT Baud$;
Baud$ = LTRIM$(STR$(VAL(Baud$) * 4))
PRINT " Önerilen ("; Baud$; " Bps)"
END IF
'Portlarìn IRQ üretimi kapatìlìyor
OUT Port + 1, 0
OUT Port + 4, 0
ELSE
PRINT "Hiç aygìt yok !!!"
END IF
NEXT
'ÿnterrupt yazmacìna eski IRQ deºerleri iade edilecek henüz yapìlmadì
'Eski interrupt adresleri iade ediliyor
DEF SEG = 0
FOR I = 40 TO 63
POKE I, Sakla(I - 39)
NEXT
DEF SEG
END
Yolla:
FOR J = 1 TO LEN(B$)
A = ASC(MID$(B$, J, 1))
DO
IF (INP(Port + 5) AND 32) = 32 THEN
OUT Port, A
EXIT DO
END IF
LOOP
NEXT
RETURN
Gelen:
B = FIX(TIMER)
B$ = ""
DO
IF (INP(Port + 5) AND 1) = 1 THEN
B$ = B$ + CHR$(INP(Port))
END IF
IF FIX(TIMER) - B >= Bekle THEN EXIT DO
IF INSTR(B$, "OK") > 0 THEN EXIT DO
LOOP
RETURN
'Yeni interrupt rutini
YeniKesme:
DATA &H50 : 'PUSH AX
DATA &H1E : 'PUSH DS
DATA &HB8, 0, &HB9 : 'MOV AX, B900
DATA &H8E, &HD8 : 'MOV DS, AX
DATA &H88, &H26, 2, 0 : 'MOV [0002], AH
DATA &HB0, &H20 : 'MOV AL,20
DATA &HE6, &H20 : 'MOV 20,AL
DATA &H1F : 'POP DS
DATA &H58 : 'POP AX
DATA &HCF : 'IRET
'ÿnterrupt Kontrol Yazmacìnìn IRQ'ya izin verme rutini
IRQSerbest:
DATA &H50 : 'PUSH AX
DATA &H53 : 'PUSH BX
DATA &H51 : 'PUSH CX
DATA &H1E : 'PUSH DS
DATA &HFA : 'CLI
DATA &HB8, 0, &HB9 : 'MOV AX,B900
DATA &H8E, &HD8 : 'MOV DS,AX
DATA &H31, &HC9 : 'XOR CX,CX
DATA &HB1, 2 : 'MOV CL,02
DATA &HBB, 1, 0 : 'MOV BX,0001
DATA &HD3, &HE3 : 'SHL BX,CL
DATA &HF7, &HD3 : 'NOT BX
DATA &HE4, &HA1 : 'IN AL,A1
DATA &HA2, 0, 0 : 'MOV [0000],AL
DATA &H20, &HF8 : 'AND AL,BH
DATA &HE6, &HA1 : 'OUT A1,AL
DATA &HE4, &H21 : 'IN AL,21
DATA &HA2, 1, 0 : 'MOV [0001],AL
DATA &H20, &HD8 : 'AND AL,BL
DATA &HE6, &H21 : 'OUT 21,AL
DATA &HFB : 'STI
DATA &H1F : 'POP DS
DATA &H59 : 'POP CX
DATA &H5B : 'POP BX
DATA &H58 : 'POP AX
DATA &HCB : 'RETF